用gdb调试单个程序,多线程,多进程

您所在的位置:网站首页 gdb调试 多线程 用gdb调试单个程序,多线程,多进程

用gdb调试单个程序,多线程,多进程

2023-08-16 04:11| 来源: 网络整理| 查看: 265

GDB调试程序

在linux中使用gdb调试时我们可以在编译的时候加上-g即可。如果你用一个makefile文件做处理,只需要在里面加上调试信息。gdb调试的是正在运行的程序,而不是我们已经编写好的.c文件。 如果我们没有添加-g,编译完成后我们可以用ls -l 来查看程序的大小,此时main的大小为5000 在这里插入图片描述 当我们加上调试信息-g后,我们再用ls -l 来查看main的大小,此时main的大小为6812。 这说明在main程序中,已经添加了我们的一些调试信息 在这里插入图片描述 在调试过程中,我们调试需要进行一些操作,以下为基本调试信息操作: l(list):显示代码,通常我们每执行一次l操作,就会显示10行代码。如果想看某个函数的某一行,我们可以用l filename 10来操作,跳转函数的第10行代码 b(break):给代码加断点,比如:b 16,就是给第16行代码加断电 info break:这个命令可以查看我们都在哪些地方加了断点 r(run):执行程序 在这里插入图片描述

bt:函数调用栈关系 n:单目执行,往下走 在这里插入图片描述

s:进入函数 p d:打印出d所对应的值 finish:快速退出 在这里插入图片描述

c:一直往下走,知道遇到断点停止 q:退出调试 在这里插入图片描述 set var:修改变量的值 delete breakpoints:删除所有断点

多线程

在多线程环境下调试程序,我们首先在main函数中创建两个线程pthread_one,pthread_two 在这里插入图片描述 我们可以用ps aux|grep 'main’来查看当前运行的进程 在这里插入图片描述 pstree -p ID(进程ID),用来查看进程和线程之间的包含关系 在这里插入图片描述 gdb attach 3954(进程ID),这里显示我们创建了两个线程 在这里插入图片描述 info inferiors是查看进程,相对info thread是查看线程 在这里插入图片描述 bt查看线程结构 在这里插入图片描述

thread 1 切换到线程1,thread 2切换到线程2,以此类推 在这里插入图片描述 显示程序内容 在这里插入图片描述

给函数加断点 在这里插入图片描述 查看断点所在位置 在这里插入图片描述 cout,继续执行 在这里插入图片描述

多进程

首先写一个进程,然后让它fork出一个子进程:我们将打印出子进程的ID和子进程的父进程ID,同时睡眠一秒打印出父进程的ID和父进程的父进程ID(bash)

在这里插入图片描述

打印结果如下: 在这里插入图片描述

用show指令查看show follow-fork-mode[parent|child]和detach-on-fork[on|off]当前状态 在这里插入图片描述 在这里插入图片描述 用set指令将follow-fork-mode和detzch-on-fork选项设置为child和0

在这里插入图片描述 在fork出加断点B (行号),然后r运行值断点处,出入info inferiors查看程序中的多进程,gdb会默认赋予编号在这里插入图片描述

此时*停留在num 3上,我们可以通过inferior +数字来切换进程 在这里插入图片描述 当我们调试到一半时想退出,输入q指令,此时系统会提示你是否要退出,我们输入y(yes)即可退出 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3